Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / Sideband.git / files / sbapp / kivymd / uix / circularlayout.py

Displaying Raw • Download


sbapp/kivymd/uix/circularlayout.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 5.51 KB

T8b949e"""
Components/CircularLayout
=========================

CircularLayout is a special layout that places widgets around a circle.

MDCircularLayout
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

.. rubric:: Usage

.. code-block::

from kivy.lang.builder import Builder
from kivy.uix.label import Label

from kivymd.app import MDApp

kv = '''
MDScreen:

MDCircularLayout:
id: container
pos_hint: {"center_x": .5, "center_y": .5}
row_spacing: min(self.size) * 0.1
'''


class Main(MDApp):
def build(self):
return Builder.load_string(kv)

def on_start(self):
for x in range(1, 49):
self.root.ids.container.add_widget(
Label(text=f"{x}", color=[0, 0, 0, 1])
)


Main().run()

.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/circular-layout.png
:align: center
"""

Te6edf3__all__ Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffMDCircularLayoutTa5d6ff"Tb4b4b4,Tb4b4b4)

Tff7b72from T7ee787math Tff7b72import Te6edf3atan2Tb4b4b4, Te6edf3cosTb4b4b4, Te6edf3degreesTb4b4b4, Te6edf3radiansTb4b4b4, Te6edf3sin

Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3BooleanPropertyTb4b4b4, Te6edf3NumericProperty

Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787floatlayout Tff7b72import Te6edf3MDFloatLayout


Tff7b72class T56d364MDCircularLayoutTb4b4b4(Te6edf3MDFloatLayoutTb4b4b4)Tb4b4b4:
Te6edf3degree_spacing Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff30Tb4b4b4)
T8b949e"""
The space between children in degree.

:attr:`degree_spacing` is an :class:`~kivy.properties.NumericProperty`
and defaults to `30`.
"""

Te6edf3circular_radius Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3allownoneTff7b72=Tff7b72TrueTb4b4b4)
T8b949e"""
Radius of circle. Radius will be the greatest value in the layout if `circular_radius` if not specified.

:attr:`circular_radius` is an :class:`~kivy.properties.NumericProperty`
and defaults to `None`.
"""

Te6edf3start_from Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff60Tb4b4b4)
T8b949e"""
The positon of first child in degree.

:attr:`start_from` is an :class:`~kivy.properties.NumericProperty`
and defaults to `60`.
"""

Te6edf3max_degree Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff360Tb4b4b4)
T8b949e"""
Maximum range in degree allowed for each row of widgets before jumping to the next row.

:attr:`max_degree` is an :class:`~kivy.properties.NumericProperty`
and defaults to `360`.
"""

Te6edf3circular_padding Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff25dpTa5d6ff"Tb4b4b4)
T8b949e"""
Padding between outer widgets and the edge of the biggest circle.

:attr:`circular_padding` is an :class:`~kivy.properties.NumericProperty`
and defaults to `25dp`.
"""

Te6edf3row_spacing Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff50dpTa5d6ff"Tb4b4b4)
T8b949e"""
Space between each row of widget.

:attr:`row_spacing` is an :class:`~kivy.properties.NumericProperty`
and defaults to `50dp`.
"""

Te6edf3clockwise Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e"""
Direction of widgets in circular direction.

:attr:`clockwise` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `True`.
"""

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(
Te6edf3row_spacingTff7b72=Tff7b72selfTff7b72.Td2a8ff_update_layoutTb4b4b4,
Tb4b4b4)

Tff7b72def Td2a8ffget_angleTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3posTb4b4b4: Tffa657tupleTb4b4b4) Tff7b72-Tff7b72> Tffa657floatTb4b4b4:
T8b949e"""Returns the angle of given pos."""

Te6edf3center Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72/ T79c0ff2Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4]
Tb4b4b4(Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4) Tff7b72= Tb4b4b4(Te6edf3centerTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Te6edf3posTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3centerTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72- Te6edf3posTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3angle Tff7b72= Te6edf3degreesTb4b4b4(Te6edf3atan2Tb4b4b4(Tffa657floatTb4b4b4(Te6edf3dyTb4b4b4)Tb4b4b4, Tffa657floatTb4b4b4(Te6edf3dxTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3angle Tff7b72+Tff7b72= T79c0ff180
Tff7b72return Te6edf3angle

Tff7b72def Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3widgetTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_update_layoutTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffdo_layoutTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3largsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_update_layoutTb4b4b4(Tb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffdo_layoutTb4b4b4(Tff7b72*Te6edf3largsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)

Tff7b72def Td2a8ff_max_per_rowTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_degree Tff7b72/ Tff7b72selfTff7b72.Td2a8ffdegree_spacingTb4b4b4)

Tff7b72def Td2a8ff_update_layoutTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3indexTb4b4b4, Te6edf3child Tff7b72in Tffa657enumerateTb4b4b4(Tffa657reversedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3pos Tff7b72= Tff7b72selfTff7b72.Td2a8ff_point_on_circleTb4b4b4(
Tff7b72selfTff7b72.Td2a8ff_calculate_radiusTb4b4b4(Te6edf3indexTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_calculate_degreeTb4b4b4(Te6edf3indexTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3childTff7b72.Td2a8ffcenter Tff7b72= Te6edf3pos

Tff7b72def Td2a8ff_calculate_radiusTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3indexTb4b4b4)Tb4b4b4:
T8b949e"""Calculates the radius for given index."""

Te6edf3idx Tff7b72= Tffa657intTb4b4b4(Te6edf3index Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_max_per_rowTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcircular_radiusTb4b4b4:
Te6edf3init_radius Tff7b72= Tb4b4b4(
Tffa657minTb4b4b4(Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72/ T79c0ff2Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4]Tb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffcircular_padding
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3init_radius Tff7b72= Tff7b72selfTff7b72.Td2a8ffcircular_radius

Tff7b72if Te6edf3idx Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3space Tff7b72= Tff7b72selfTff7b72.Td2a8ffrow_spacing Tff7b72* Te6edf3idx
Te6edf3init_radius Tff7b72-Tff7b72= Te6edf3space

Tff7b72return Te6edf3init_radius

Tff7b72def Td2a8ff_calculate_degreeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3indexTb4b4b4)Tb4b4b4:
T8b949e"""Calculates the angle for given index."""

Tff7b72if Tff7b72selfTff7b72.Td2a8ffclockwiseTb4b4b4:
Te6edf3degree Tff7b72= Tff7b72selfTff7b72.Td2a8ffstart_from Tff7b72- Te6edf3index Tff7b72* Tff7b72selfTff7b72.Td2a8ffdegree_spacing
Tff7b72elseTb4b4b4:
Te6edf3degree Tff7b72= Tff7b72selfTff7b72.Td2a8ffstart_from Tff7b72+ Te6edf3index Tff7b72* Tff7b72selfTff7b72.Td2a8ffdegree_spacing

Tff7b72return Te6edf3degree

Tff7b72def Td2a8ff_point_on_circleTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3radiusTb4b4b4, Te6edf3degreeTb4b4b4)Tb4b4b4:
Te6edf3angle Tff7b72= Te6edf3radiansTb4b4b4(Te6edf3degreeTb4b4b4)
Te6edf3center Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72/ T79c0ff2Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4]
Te6edf3x Tff7b72= Te6edf3centerTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4)
Te6edf3y Tff7b72= Te6edf3centerTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3xTb4b4b4, Te6edf3yTb4b4b4]


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787label Tff7b72import Te6edf3Label

Tff7b72from T7ee787kivymdT7ee787.T7ee787app Tff7b72import Te6edf3MDApp

Te6edf3kv Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:

Ta5d6ff MDCircularLayout:
Ta5d6ff id: container
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_xTa5d6ff"Ta5d6ff: .5, Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: .5}
Ta5d6ff row_spacing: min(self.size) * 0.1
Ta5d6ff Ta5d6ff"""

Tff7b72class T56d364MainTb4b4b4(Te6edf3MDAppTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffbuildTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3kvTb4b4b4)

Tff7b72def Td2a8ffon_startTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3x Tff7b72in Tffa657rangeTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff49Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffcontainerTff7b72.Td2a8ffadd_widgetTb4b4b4(
Te6edf3LabelTb4b4b4(Te6edf3textTff7b72=Ta5d6fffTa5d6ff"Tffd700{Te6edf3xTffd700}Ta5d6ff"Tb4b4b4, Te6edf3colorTff7b72=Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Tb4b4b4)

Te6edf3MainTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrunTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────